/*
 *  Лицензия MIT
 * 
 *  Copyright 2011 Salnikov Aleksey.
 * 
 *  Данная лицензия разрешает, безвозмездно, лицам, получившим копию данного программного обеспечения
 *  и сопутствующей документации (в дальнейшем именуемыми "Программное Обеспечение"),
 *  использовать Программное Обеспечение без ограничений, включая неограниченное право
 *  на использование, копирование, изменение, объединение, публикацию, распространение,
 *  сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам,
 *  которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
 * 
 *  Вышеупомянутый копирайт и данные условия должны быть включены во все копии или значимые
 *  части данного Программного Обеспечения.
 * 
 *  ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ ЛЮБОГО ВИДА ГАРАНТИЙ,
 *  ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ,
 *  СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И НЕНАРУШЕНИЯ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ
 *  НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ
 *  ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ
 *  С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
 *  ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
 */

package CommonTools;

import java.util.ArrayList;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.event.EventListenerList;
import javax.swing.event.ListDataListener;

/**
 * Модель выпадающего списка администраторов
 *
 * @author Salnikov Aleksey
 */
public class AdminComboBoxModel implements ComboBoxModel{

    private     ArrayList<Admin> admins;
    private     EventListenerList listenerList = new EventListenerList();
    private     Object      selectedObject;
    private     DefaultComboBoxModel dcbm;

    public AdminComboBoxModel(ArrayList<Admin> admins)
    {
        this.admins = admins;
        this.admins.add(new Admin(-2, "назначен", "Не", "", "", "",0, "", ""));
    }

    public void setSelectedItem(Object anItem) {
        if ((selectedObject != null && !selectedObject.equals( anItem )) ||
	    selectedObject == null && anItem != null)
        {
	    selectedObject = anItem;
        }
    }

    public Object getSelectedItem() {
        return selectedObject;
    }

    public int getSize() {
        return admins.size();
    }

    public Object getElementAt(int index) {
        Admin admin = admins.get(index);
        return admin.getFam() + " " + admin.getName();
    }

    public void addListDataListener(ListDataListener l) {
        listenerList.add(ListDataListener.class, l);
    }

    public void removeListDataListener(ListDataListener l) {
        listenerList.remove(ListDataListener.class, l);
    }

    /**
     * Функция возвращает объект Admin по индексу в комбобоксе
     * @param index
     * @return
     */
    public Admin getAdmin(int index)
    {
        return admins.get(index);
    }


    /**
     * Процедура поиска номера конкретного администратора в спике
     * @param admin Admin администратор, позицию которого ищем
     * @return int номер (позиция) администратораы
     */
    public int getAdminPosition(Admin admin)
    {
        for (int i = 0; i < admins.size(); i++)
            if (admins.get(i).getId() == admin.getId())
                return i;
        return admins.size() - 1;
    }

}
